1-1 MATLAB p

MATLAB 是由 MathWorks 公司於 1984 年推出的數學軟體,其名稱是由「矩陣實驗室」(MATrix LABoratory)所合成,因此可知其最早的目標是提供一套非常完善的矩陣運算指令,但隨著數值運算需求的演變以及個人電腦運算速度的倍增,MATLAB 已成為各種動態系統模擬、數位訊號處理、科學計算、科學目視等領域的標準程式語言。

Cleve Moler 教授

Cleve Moler 教授

MATLAB 雖然在 1984 年首次推出商用版,但其前身早在 1978 年即已現身,其作者是當於任教於新墨西哥大學的 Cleve Moler 教授,不過當時的 MATLAB 是用 Fortran 撰寫的免費軟體,Cleve Moler 教授使用此軟體來使學生更容易瞭解線性代數、數值方法與矩陣理論。事實上,MATLAB 的許多的核心計算技術是源自於 LINPACK 及 EISPACK,這是兩個美國國科會計畫所發展的數值運算軟體,當時 Cleve Moler 教授也是計畫主持人之一,因此 MATLAB 的數值計算能力,可說是經過了超過 20 多年的千錘百鍊,有著深厚的學術理論基礎,並不是一般數學軟體可以望其項背的。(註:MATLAB 第六版後採用了另一套數學程式庫,稱為「LAPACK」。) Cleve Moler 現在不但是該公司的首席科學家,而且以 60 多歲的高齡,還常常親自進行撰寫程式之工作,這是令筆者最為佩服的地方,也是促使筆者不斷親自開發各項程式之原動力 。如果您有數值運算方面的高深問題,寄到 MathWorks 總公司,大部份還是會由 Cleve Moler 親自回答。(各位是否記得在 1994 年,Pentium 晶片曾發生 Fdiv 的 bug?當時 Cleve Moler 是第一個以軟體解決此 bug 的人,曾一時膾炙人口。)

The MathWorks Inc. 創辦人 Jack Little

The MathWorks Inc. 創辦人 Jack Little

雖然 Cleve Moler 是 MATLAB 的原作者,但是第一個將 MATLAB 商品化的人並不是他,而是 Jack Little(又稱為 John Little)。Jack Little 在 Stanford 大學主修控制,當時即接觸到 MATLAB,直覺告訴他,這是一個深具潛力的數學軟體。因此他在畢業後沒多久,即決定將 MATLAB 以 C 語言重寫 (原先 Cleve Moler 教授是以 Fortran 寫的),並於 1984 年成立 MathWorks 公司,首次推出 MATLAB 商用版。在公司草創的五年,Jack Little 非常辛苦,常常身兼數職(董事長、總經理、行銷、業務、收發兼工友),但公司一直穩定成長,從當初的一人公司,到 1993 年(筆者任職時)的 200 人,到 2002 年(本書前身第一版發行)的 600 餘人,以及 2004 年(本書分為入門與進階兩冊首次發行)的 1300 餘人(含美國以外的分公司), 不但打敗其他競爭軟體,而且前景一片欣欣向榮。根據 Jack Little 個人現身說法,MATLAB 早期成功的兩大因素是:選用了 C 語言及選定 PC 為主要平台, 這似乎和微軟的成功有相互呼應之妙。

MathWorks 雖然已是超過 1000 人的大公司,但至今仍然是私人企業,並未上市,這和 Jack Little 個人理念有關,他覺得 MATLAB 的設計方向一直是以顧客的需求與軟體的完整性為首要目標 ,而不是以獲利為主,因此 MATLAB 一直是在穩定中求進步,而不會因為上市而遭受股東左右發展方向。(這也是為什麼 MATLAB 新版本總是姍姍來遲,因為他們不會因為市場的需求而推出不成熟的產品。)此外,由於 Jack Little 保守的個性,也使得 MathWorks 不曾跨足 MATLAB/Simulink 軟體以外的事業,當前商場上紛紛擾擾的購併或分家,MathWorks 完全是絕緣體。

筆者有幸於 1993 ~ 1995 年任職於 MathWorks 公司,深覺此公司的成功並非倖致。公司本身非常具有活力,夏天有全公司總動員的 Summer outing,冬天則有室內的 Sports party,每個星期有一天稱為 Tuesday(不見得是星期二),是大夥兒下班後一起到 Pub 喝酒放鬆的日子(帳單當然是由公司負責)。平常彈性時間上班,公司內還有免費的高級果汁及軟性飲料,晚上若不想回家,晚餐(大部份是 Bertucci's pizza)也由公司招待。在技術應用方面,MathWorks 深諳 Internet 的使用之道,不但很早就在 Newsgroup 上進行對使用者的技術指導,在 WWW 興起之後,也很早就提供各項技術支援與搜尋功能,並在內聯網(Intranet)方面,以 Web 與資料庫的整合來進行軟體 bug 的追蹤、修復與管理。MathWorks 對網路與 WWW 技術的善用,連其他專書與雜誌都曾予以專題介紹。

MATLAB 早期以矩陣運算為主,但隨著科學目視(Scientific Visualization)的需求日增,於是在 MATLAB 第 4 版推出握把式圖形(Handle Graphics),這是一個里程碑,自此之後,所有的 Demos 都包含和善親切的圖形使用者介面。另一個里程碑則是在 MATLAB 第 5 版,允許使用者建立許多不同的資料型態,(如多維陣列、結構陣列、異質陣列等),而不再只是侷限於二維的矩陣而已。

MATLAB 是一個計算核心,圍繞著這個計算核心,有許多針對不同應用所開發的應用程式,稱為工具箱(Toolboxes)。MathWorks 本身所提供的工具箱已經超過 70 個,另外還有其他公司或研究單位所提供的工具箱,這些工具箱的總數已有數百個之多,而且新的工具箱還在持續增加之中。因此如果您有特定的應用領域,您應該上網搜尋是否有相關的工具箱,很可能已經有人將您所要的應用程式寫成一個工具箱了!(在2007年5月測試的結果:如果你在 http://www.google.com 輸入「matlab toolbox」,可以傳回超過 126 萬個相關的網頁。)

除了 MATLAB 之外,MathWorks 還有兩項主要相關產品,即是 Simulink 及 Stateflow。Simulink 專用於連續或離散時間的動態系統模擬,Stateflow 則用於模擬有限狀態機(Finite State Machines)或事件驅動系統(Event-driven Systems)。Simulink 是一個模擬核心,圍繞著這個核心所開發的應用程式稱為方塊集(Blocksets)。這些產品的關係可用下圖表示:

由 MATLAB Simulink Stateflow 的發展過程來看,MathWorks 的大方向已由純粹的數值運算慢慢轉向至計算模擬與硬體實現的整合(Integration)與快速原形化(Rapid Prototyping)。尤其是現有 Simulink 與 Stateflow 的 C 程式碼自動產生功能,以及定點運算方塊集(Fixed-point Blockset)與 C 程式碼至 VHDL 的自動轉換功能,可以看出無論是「高階的系統模擬」或「低階的晶片演算法設計」,都可用 MATLAB/Simulink/Stateflow 及相關的工具箱來達成。


MATLAB程式設計:入門篇